package com.lanbu.system.service.impl;


import com.lanbu.common.utils.DateUtils;
import com.lanbu.common.utils.SecurityUtils;
import com.lanbu.system.domain.camera.CaWarn;
import com.lanbu.system.mapper.CaCameraMapper;
import com.lanbu.system.mapper.CaWarnMapper;
import com.lanbu.system.service.ICaWarnService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 摄像头预警Service业务层处理
 *
 * @author lanbu
 * @date 2024-03-12
 */
@Service
public class CaWarnServiceImpl implements ICaWarnService {


    @Autowired
    private CaWarnMapper caWarnMapper;

    @Autowired
    private CaCameraMapper caCameraMapper;

    /**
     * 查询摄像头预警
     *
     * @param id 摄像头预警主键
     * @return 摄像头预警
     */
    @Override
    public CaWarn selectCaWarnById(Long id) {
        return caWarnMapper.selectCaWarnById(id);
    }

    /**
     * 查询摄像头预警列表
     *
     * @param caWarn 摄像头预警
     * @return 摄像头预警
     */
    @Override
    public List<CaWarn> selectCaWarnList(CaWarn caWarn) {
        return caWarnMapper.selectCaWarnList(caWarn);
    }

    /**
     * 新增摄像头预警
     *
     * @param caWarn 摄像头预警
     * @return 结果
     */
    @Override
    public int insertCaWarn(CaWarn caWarn) {
        caWarn.setCreateTime(DateUtils.getNowDate());
        caWarn.setDeptId(SecurityUtils.getDeptId().toString());
        return caWarnMapper.insertCaWarn(caWarn);
    }

    /**
     * 修改摄像头预警
     *
     * @param caWarn 摄像头预警
     * @return 结果
     */
    @Override
    public int updateCaWarn(CaWarn caWarn) {
        caWarn.setUpdateTime(DateUtils.getNowDate());
        caWarn.setUserId(SecurityUtils.getUserId().toString());
        return caWarnMapper.updateCaWarn(caWarn);
    }

    /**
     * 批量删除摄像头预警
     *
     * @param ids 需要删除的摄像头预警主键
     * @return 结果
     */
    @Override
    public int deleteCaWarnByIds(Long[] ids) {
        return caWarnMapper.deleteCaWarnByIds(ids);
    }

    /**
     * 删除摄像头预警信息
     *
     * @param id 摄像头预警主键
     * @return 结果
     */
    @Override
    public int deleteCaWarnById(Long id) {
        return caWarnMapper.deleteCaWarnById(id);
    }


    @Override
    public List<CaWarn> warnByCameraId(String id) {
        return caWarnMapper.warnByCameraId(id);
    }

    /**
     * 通过摄像头Id查询摄像头预警信息
     *
     * @param id
     * @return
     */
    @Override
    @Transactional
    public CaWarn warnInformationByCameraId(Long id) {
        CaWarn caWarn = new CaWarn();
        caWarn.setId(id);
        caWarn.setWarnCheck("1");
        caWarn.setUpdateTime(DateUtils.getNowDate());
        caWarnMapper.updateCaWarn(caWarn);
        return caWarnMapper.selectCaWarnById(id);
    }

    /**
     * 处理预警信息
     *
     * @param ids
     * @return
     */
    @Override
    public int warnHandleByCameraId(Long[] ids) {
        for (Long id : ids) {
            CaWarn caWarn = new CaWarn();
            caWarn.setId(id);
            caWarn.setWarnCheck("1");
            caWarn.setWarnHandle("1");
            caWarn.setUpdateTime(DateUtils.getNowDate());
            caWarnMapper.updateCaWarn(caWarn);
        }
        return 1;
    }

    @Override
    public Long warnCount() {
        List<CaWarn> caWarns = caWarnMapper.selectCaWarnList(new CaWarn());
        return caWarns.stream().filter(caWarn -> caWarn.getWarnHandle().equals("0")).count();
    }
}
